/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package it.coraci.anag.db.sql.entities;

import it.coraci.anag.gui.components.basic.annotations.GuiParam;
import it.coraci.anag.gui.components.basic.annotations.GuiParamBooleanValue;
import it.coraci.anag.gui.components.basic.annotations.GuiParamFilePath;
import it.coraci.anag.gui.components.basic.annotations.GuiParamMultiValue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;

/**
 *
 * @author Luca
 */
@Entity
public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Nome")
    private String nome;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Cognome")
    private String cognome;
//    private transient String amore;
    @GuiParamBooleanValue(falseValue = "Femmina",trueValue = "Maschio")
    @GuiParam(type = GuiParam.GuiParamType.BOOLEAN, label = "Sesso")
    private boolean male;
    
    
    @GuiParam(type = GuiParam.GuiParamType.DATE, label = "Data di Nascita")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date bornDate;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Comune di Nascita")
    private String comuneDiNascita;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Provincia di Nascita")
    private String provinciaDiNascita;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "CF")
    private String CF;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Indirizzo di Residenza")
    private String residenzaIndirizzo;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "CAP")
    private String CAP;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Città di Residenza")
    private String residenzaCity;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Provincia di Residenza")
    private String residenzaProvincia;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Telefono fisso")
    private String telefonoCasa;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Cellulare")
    private String cellulare;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Email")
    private String email;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Tel. Ufficio")
    private String telUfficio;
    @GuiParam(type = GuiParam.GuiParamType.TEXT, label = "Fax")
    private String fax;
    
    @OneToMany
    @GuiParam(type = GuiParam.GuiParamType.ONE_TO_MANY, label = "Documenti")
    private List<IDDocument> iddocuments = new ArrayList<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getComuneDiNascita() {
        return comuneDiNascita;
    }

    public void setComuneDiNascita(String comuneDiNascita) {
        this.comuneDiNascita = comuneDiNascita;
    }

    public String getProvinciaDiNascita() {
        return provinciaDiNascita;
    }

    public void setProvinciaDiNascita(String provinciaDiNascita) {
        this.provinciaDiNascita = provinciaDiNascita;
    }

    public String getCF() {
        return CF;
    }

    public void setCF(String CF) {
        this.CF = CF;
    }

    public String getResidenzaIndirizzo() {
        return residenzaIndirizzo;
    }

    public void setResidenzaIndirizzo(String residenzaIndirizzo) {
        this.residenzaIndirizzo = residenzaIndirizzo;
    }

    public String getCAP() {
        return CAP;
    }

    public void setCAP(String CAP) {
        this.CAP = CAP;
    }

    public String getResidenzaCity() {
        return residenzaCity;
    }

    public void setResidenzaCity(String residenzaCity) {
        this.residenzaCity = residenzaCity;
    }

    public String getResidenzaProvincia() {
        return residenzaProvincia;
    }

    public void setResidenzaProvincia(String residenzaProvincia) {
        this.residenzaProvincia = residenzaProvincia;
    }

    public String getTelefonoCasa() {
        return telefonoCasa;
    }

    public void setTelefonoCasa(String telefonoCasa) {
        this.telefonoCasa = telefonoCasa;
    }

    public String getCellulare() {
        return cellulare;
    }

    public void setCellulare(String cellulare) {
        this.cellulare = cellulare;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelUfficio() {
        return telUfficio;
    }

    public void setTelUfficio(String telUfficio) {
        this.telUfficio = telUfficio;
    }

    public String getFax() {
        return fax;
    }

    public void setFax(String fax) {
        this.fax = fax;
    }
    
    

    public List<IDDocument> getIddocuments() {
        return iddocuments;
    }

    public void setIddocuments(List<IDDocument> iddocuments) {
        this.iddocuments = iddocuments;
    }
    
    public void addIdDocument(IDDocument document){
        this.iddocuments.add(document);
    }

    
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public boolean isMale() {
        return male;
    }

    public void setMale(boolean male) {
        this.male = male;
    }

    public Date getBornDate() {
        return bornDate;
    }

    public void setBornDate(Date bornDate) {
        this.bornDate = bornDate;
    }
    
    

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Person)) {
            return false;
        }
        Person other = (Person) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return nome+ " "+cognome;
//        return "it.coraci.anag.db.entities.Persona[ id=" + id + " ]";
    }
    
}
